macro(today RESULT)
  if(WIN32)
    execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
    string(REGEX REPLACE "[^0-9]*([0-9]+)[^0-9]([0-9]+)[^0-9]([0-9]+).*" "\\1-\\2-\\3" ${RESULT} ${${RESULT}})
  elseif(UNIX)
    execute_process(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT})
    string(REGEX REPLACE "(....)-(..)-(..).*" "\\1-\\2-\\3" ${RESULT} ${${RESULT}})
  else(WIN32)
    message(WARNING "date not implemented")
    set(${RESULT} 00-00-0000)
  endif(WIN32)
endmacro(today)

macro(now RESULT)
  if(WIN32)
    execute_process(COMMAND "cmd" " /C time /T" OUTPUT_VARIABLE ${RESULT})
    string(REGEX REPLACE "(..):(..).*" "\\1:\\2:00" ${RESULT} ${${RESULT}})
  elseif(UNIX)
    execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE ${RESULT})
    string(REGEX REPLACE "(..):(..):(..).*" "\\1:\\2:\\3" ${RESULT} ${${RESULT}})
  else(WIN32)
    message(WARNING "time not implemented")
    set(${RESULT} 00:00:00)
  endif(WIN32)
endmacro(now)

find_package(Git)

macro(git_id RESULT)
  set(${RESULT} 0)
  if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
    execute_process(COMMAND "${GIT_EXECUTABLE}" "--git-dir=${PROJECT_SOURCE_DIR}/.git" "rev-parse" "--short=8" "HEAD" OUTPUT_VARIABLE proc_out ERROR_VARIABLE proc_err)
    if(proc_err)
      message(WARNING "Git failed with error: ${proc_err}")
    else()
      string(REGEX REPLACE "(.*)\n" "\\1" ${RESULT} ${proc_out})
    endif()
  elseif(NOT GIT_FOUND)
    message(WARNING "Git executable not found, revision number not available.")
  else()
    message(STATUS "Git repository not found, revision number not available.")
  endif()
endmacro(git_id)

macro(use_cxx11)
  if (CMAKE_VERSION VERSION_LESS "3.1" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}")
  endif ()
endmacro(use_cxx11)

macro(PrintTargetReport targetName)
  if(CMAKE_CXX_COMPILER MATCHES "/(clang-)?cl\\.exe$")
    set(cpp_version ${CMAKE_CXX_COMPILER_VERSION})
  else()
    execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE cpp_version)
  endif()
  if(cpp_version)
    string(STRIP "v${cpp_version}" cpp_version)
  else()
    set(cpp_version "WARNING: COMPILER NOT FOUND!")
  endif()
  message("TARGET ${targetName}: cpp compiler ${CMAKE_CXX_COMPILER} ${cpp_version}")

  if(VERBOSE_CMAKELISTS)
    get_directory_property(DirOpts COMPILE_OPTIONS)
    get_directory_property(DirDefs COMPILE_DEFINITIONS)
    string(REPLACE ";" " " DirOpts "${DirOpts}")
    string(REPLACE ";" "; " DirDefs "${DirDefs}")
    string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type)
    message("\twith cpp flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${build_type}} ${DirOpts}")
    message("\twith link flags: ${CMAKE_EXE_LINKER_FLAGS}")
    message("\twith defs: ${DirDefs}")
    message("--------------")
  endif()
endmacro(PrintTargetReport)
